PyTorch দিয়ে মডেল তৈরি করা এবং ফিট করা

মডেল ট্রেনিং এবং ইভ্যালুয়েশন - পাইটর্চ (Pytorch) - Machine Learning

335

PyTorch একটি শক্তিশালী লাইব্রেরি যা ডিপ লার্নিং মডেল তৈরি, প্রশিক্ষণ এবং টেস্ট করার জন্য ব্যবহৃত হয়। এখানে আমরা দেখব কীভাবে PyTorch ব্যবহার করে একটি সাধারণ নিউরাল নেটওয়ার্ক মডেল তৈরি এবং এটি ফিট (train) করা যায়।


১. PyTorch এ মডেল তৈরি করা

আমরা একটি সাধারণ ফিডফরোয়ার্ড নিউরাল নেটওয়ার্ক (Fully Connected Neural Network) তৈরি করব, যেটি MNIST ডেটাসেট (হাতে লেখা অঙ্ক) শ্রেণিবদ্ধ করার জন্য ব্যবহৃত হবে। প্রথমে আপনাকে কিছু প্যাকেজ ইনপোর্ট করতে হবে এবং ডেটাসেট লোড করতে হবে।

কোড:

# প্রয়োজনীয় প্যাকেজ ইনপোর্ট
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

# ডেটাসেট লোড করা এবং ট্রান্সফর্ম সেট করা
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])

trainset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = DataLoader(trainset, batch_size=64, shuffle=True)

testset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)
testloader = DataLoader(testset, batch_size=64, shuffle=False)

# নিউরাল নেটওয়ার্ক মডেল তৈরি করা
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        # লেয়ার সংজ্ঞায়িত করা
        self.fc1 = nn.Linear(28*28, 128)  # ইনপুট সাইজ (28x28 পিক্সেল)
        self.fc2 = nn.Linear(128, 64)
        self.fc3 = nn.Linear(64, 10)  # আউটপুট ক্লাসের সংখ্যা: 10 (0-9)

    def forward(self, x):
        # ফিডফরোয়ার্ড
        x = x.view(-1, 28*28)  # ইনপুটকে 1D ভেক্টরে রূপান্তরিত করা
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = self.fc3(x)
        return x

# মডেল ইনস্ট্যান্স তৈরি
model = SimpleNN()

২. ফিট (Train) করা

মডেল তৈরি করার পর, আমরা মডেলকে ট্রেনিং করতে ব্যবহার করি লস ফাংশন এবং অপটিমাইজার। এখানে আমরা CrossEntropyLoss এবং SGD অপটিমাইজার ব্যবহার করব।

কোড:

# লস ফাংশন এবং অপটিমাইজার সেট করা
criterion = nn.CrossEntropyLoss()  # ক্লাসিফিকেশন প্রক্রিয়া জন্য লস ফাংশন
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)  # অপটিমাইজার

# মডেল ট্রেনিং
num_epochs = 5  # ট্রেনিং এর জন্য 5 ইপোক

for epoch in range(num_epochs):
    running_loss = 0.0
    for i, (inputs, labels) in enumerate(trainloader, 0):
        # গ্রেডিয়েন্ট শূন্য করা
        optimizer.zero_grad()

        # ফরওয়ার্ড পাস
        outputs = model(inputs)
        loss = criterion(outputs, labels)

        # ব্যাকপ্রোপাগেশন
        loss.backward()

        # অপটিমাইজার স্টেপ (ওজন আপডেট করা)
        optimizer.step()

        # লোকাল ট্র্যাকিং
        running_loss += loss.item()
        if i % 100 == 99:  # প্রতি 100 ব্যাচে লোকাল লস দেখান
            print(f"Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(trainloader)}], Loss: {running_loss / 100:.4f}")
            running_loss = 0.0

print("Training Finished.")

৩. মডেল টেস্ট করা

একবার মডেল ট্রেনিং সম্পন্ন হলে, আমরা টেস্ট ডেটা ব্যবহার করে মডেলটিকে মূল্যায়ন (evaluate) করব।

কোড:

# মডেল টেস্টিং
correct = 0
total = 0

with torch.no_grad():  # টেস্টিং এর সময় গ্র্যাডিয়েন্ট ক্যালকুলেশন বন্ধ
    for inputs, labels in testloader:
        outputs = model(inputs)
        _, predicted = torch.max(outputs, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print(f"Accuracy on the test dataset: {100 * correct / total:.2f}%")

সারাংশ

  1. মডেল তৈরি: PyTorch দিয়ে একটি নিউরাল নেটওয়ার্ক মডেল তৈরি করতে nn.Module কাস্টম ক্লাস ব্যবহার করা হয়, যেখানে লেয়ারগুলো (fully connected, ReLU, etc.) এবং forward ফাংশন সংজ্ঞায়িত করা হয়।
  2. মডেল ফিট (Train): ট্রেনিংয়ের জন্য লস ফাংশন এবং অপটিমাইজার ব্যবহার করে, ফিডফরোয়ার্ড এবং ব্যাকপ্রোপাগেশন প্রক্রিয়া সম্পন্ন করা হয়।
  3. মডেল টেস্ট: ট্রেনিংয়ের পরে মডেলকে টেস্ট ডেটাসেটের উপর পরীক্ষা করা হয় এবং অ্যাকিউরেসি পরিমাপ করা হয়।

এই ধাপগুলি অনুসরণ করে আপনি PyTorch দিয়ে সহজেই মডেল তৈরি এবং প্রশিক্ষণ করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...